package com.zyl.blog.common.annotation;

import com.zyl.blog.common.enums.SensitiveType;
import com.zyl.blog.common.strategy.SensitiveStrategy;

import java.lang.annotation.*;

/**
 * 数据脱敏注解
 * 用于标记需要进行脱敏处理的字段
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.common.annotation
 * @ClassName: Sensitive
 * @Author FinalFantasy
 * @Date 2025/9/8-10:18
 */

@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Sensitive {

    /**
     * 脱敏类型（默认使用自定义策略）
     */
    SensitiveType type() default SensitiveType.CUSTOM;

    /**
     * 自定义脱敏策略（当type为CUSTOM时生效）
     */
    Class<? extends SensitiveStrategy> strategy() default SensitiveStrategy.class;

    /**
     * 前置保留长度（如手机号保留前3位：3）
     */
    int prefixLen() default 0;

    /**
     * 后置保留长度（如手机号保留后4位：4）
     */
    int suffixLen() default 0;

    /**
     * 脱敏符号（默认用*）
     */
    char maskChar() default '*';
}
